package com.one.group.user.config;

import cn.dev33.satoken.stp.StpUtil;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.*;

/**
 * {@code @Create:}  2025-10-15  16 : 45
 * {@code @Author:} Qwen
 * {@code @ToUser:} 凡是发生,皆有利于我。
 * ------------------------------------
 * {@code @note:} Dubbo服务提供方过滤器，用于设置SaToken上下文
 */
@Activate(group = CommonConstants.PROVIDER)
public class SaTokenDubboProviderFilter implements Filter {

    public static final String SA_TOKEN_KEY = "token";

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        // 从Invocation中获取token
        String token = invocation.getAttachment(SA_TOKEN_KEY);

        // 如果token存在，则设置到SaToken上下文中
        if (token != null && !token.isEmpty()) {
            // 手动设置登录状态
            StpUtil.login(token);
        }

        // 继续执行
        return invoker.invoke(invocation);
    }
}
